32. public inheritance as "is-a"

D Derived B as Public
D(Derived) 타입으로 만들어진 모든 객체가 B(Base) 타입의 객체이지만,
반대는 성립하지 않음을 의미한다.
(B는 D보다 일반적인 개념임을 의미하고, D는 B보다 더 특수한 개념임을 의미한다.)
class Person{ /* ... */ };
class Student: public Person{ /* ... */ };
void eat(const Person& p);
void studey(const Student& s);
Person p;
Student s;
eat(p);
eat(s);
study(s);
study(p); // error: Person Student
위 동작은 Base class를 public 상속했을 때만 성립한다.

class 사이의 관계에는 아래와 같은 종류가  있다.
1. is-a(…는 …의 일종임)
2. has-a(…는 …를 가짐)
3. is-implemented-in-terms-of(…는 …를 써서 구현됨)